home *** CD-ROM | disk | FTP | other *** search
/ SuperHack / SuperHack CD.bin / Hack / INTERNET / WD.ZIP / WD.C
Encoding:
C/C++ Source or Header  |  1996-06-24  |  2.2 KB  |  102 lines

  1.  
  2. /* 
  3.  * internet port scanner 
  4.  *
  5.  * This program will scan a hosts TCP ports printing all ports that accept
  6.  * connections, and if known, the service name.
  7.  * This program can be trivially altered to do UDP ports also.
  8.  *
  9.  * Kopywrong (K) Aug. 25, '94 pluvius@io.org
  10.  *
  11.  * Hey kiddies, this is a C program, to run it do this:
  12.  * $ cc -o pscan pscan.c
  13.  * $ pscan <host> [max port]
  14.  *
  15.  * No, this will not get you root.
  16. */
  17. static char sccsid[] = "@(#)pscan.c    1.0    (KRAD) 08/25/94";
  18. #include <stdio.h>
  19. #include <sys/types.h>
  20. #include <sys/socket.h>
  21. #include <netinet/in.h>
  22. #include <netdb.h>
  23.  
  24. #define MAX_PORT 1024 /* scan up to this port */
  25. int s;
  26. struct sockaddr_in addr;
  27. char rmt_host[100];
  28.  
  29. int skan(port)
  30. int port;
  31. {
  32.  int r;
  33.     s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
  34.     if (s < 0) {
  35.        fprintf("ERROR: socket() failed\n");
  36.        exit(0);
  37.     }
  38.  
  39.     addr.sin_family = PF_INET;
  40.     addr.sin_port = port;
  41.     addr.sin_addr.s_addr = inet_addr(rmt_host);
  42.  
  43.     r = connect(s,(struct sockaddr *) &addr, sizeof(addr));
  44.  
  45.     close(s);
  46.  
  47.     if (r < 0) {
  48.        return (1 == 0);
  49.     }
  50.  
  51.     return (1 == 1);
  52. }
  53.  
  54. main(argc,argv) 
  55. int argc;
  56. char *argv[];
  57. {
  58.  int a,b,c,d,e,f;
  59.  struct hostent *foo;
  60.  struct servent *bar;
  61.  
  62.    if (argc < 2) {
  63.       fprintf(stderr,"usage: %s <host> [highest port]\n",argv[0]);
  64.       exit(0);
  65.    }
  66.  
  67.    if (sscanf(argv[1],"%d.%d.%d.%d",&a,&b,&c,&d) != 4) {
  68.       foo = gethostbyname(argv[1]);
  69.       if (foo == NULL) {
  70.          fprintf(stderr,"error: cannot resolve host %s\n",argv[1]);
  71.          exit(0);
  72.       }
  73.       sprintf(rmt_host,"%d.%d.%d.%d",(unsigned char )foo->h_addr_list[0][0],
  74.               (unsigned char ) foo->h_addr_list[0][1], 
  75.               (unsigned char ) foo->h_addr_list[0][2], 
  76.               (unsigned char ) foo->h_addr_list[0][3]);
  77.    } else {
  78.       strncpy(rmt_host,argv[1],99);
  79.    }
  80.  
  81.  
  82.    if (argc > 2) {
  83.       f = atoi(argv[2]);
  84.    } else
  85.       f = MAX_PORT;
  86.  
  87.    fprintf(stdout,"Scanning host %s - TCP ports 1 through %d\n",rmt_host,f);
  88.  
  89.    for (e =1;e<=f;e++) {
  90.     char serv[100];
  91.       if (skan(e)) {
  92.          bar = getservbyport(e,"tcp");
  93.          printf("%d (%s) is running.\n",e,(bar == NULL) ? "UNKNOWN" :
  94.                 bar->s_name);
  95.       }
  96.    }
  97. }
  98.  
  99.  
  100.  
  101.  
  102.